package com.gitee.feizns.quickstart.log;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * 操作日志注解
 * @author feizns
 * @since 2024/2/25
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {

    /**
     * 操作类型
     * @return {@link String}
     */
    String type() default "默认类型";

    /**
     * 日志操作描述表达式（
     * 示例：@Log("'用户' + #args[0] + '修改了用户' + #args[0] + '，修改结果=' + #result")
     * 支持获取方法参数（args）
     * 支持获取方法结果（result）
     * 支持获取方法异常（exception）
     * 支持获取操作时间（time）
     * 支持获取日志类型（type）
     * 支持根据方法参数名称引用方法参数
     * @link {@link MethodLog}
     * @return {@link String}
     */
    String value();

    /**
     * 用户编号（解析表达式中的编号，具有最高优先级）
     * <p>
     * 日志操作描述表达式（
     * 示例：@Log(userid = "#id")
     * 支持获取方法参数（args）
     * 支持获取方法结果（result）
     * 支持获取方法异常（exception）
     * 支持获取操作时间（time）
     * 支持获取日志类型（type）
     * 支持根据方法参数名称引用方法参数
     * </p>
     * @return {@link String }
     */
    String userid() default "";

}
